package com.sirc.zp.mapper;

import com.sirc.zp.domain.ZP;
import com.sirc.zp.sqlprovider.ZPProvider;
import org.apache.ibatis.annotations.*;

import java.util.List;
import java.util.Map;

/**
 * 族谱表（一系列表）
 */
@Mapper
public interface ZPMapper {
    /**
     * 通过id+table获得族谱成员
     * @param map 例如 ｛table：dxzp，id：2｝
     * @return
     */
    @SelectProvider(type=ZPProvider.class, method="getPersonById")
    public ZP getPersonById(Map map);
    /**
     * 通过谱名+table获得族谱成员
     * @param map 例如 ｛table：dxzp，name：表二公｝
     * @return
     */
    @SelectProvider(type=ZPProvider.class, method="getPersonsByName")
    public List<ZP> getPersonsByName(Map map);
    /**
     * 通过身份证姓名+table获得族谱成员
     * @param map 例如 ｛table：dxzp，idname：111｝
     * @return
     */
    @SelectProvider(type=ZPProvider.class, method="getPersonsByIDName")
    public List<ZP> getPersonsByIDName(Map map);
    /**
     * 通过乳名+table获得族谱成员
     * @param map 例如 ｛table：dxzp，idname：222｝
     * @return
     */
    @SelectProvider(type=ZPProvider.class, method="getPersonsByRName")
    public List<ZP> getPersonsByRName(Map map);
    /**
     * 获得家族一共有多少代。
     * @return 返回代的列表
     */
    @SelectProvider(type=ZPProvider.class, method="getDaList")
    public List<Integer> getDaList(String table);
    /**
     * 获得家族每一代的人数
     * @param map 例如 ｛table：dxzp，gene：2｝ 获得dxzp的第二代人数
     * @return
     */
    @SelectProvider(type=ZPProvider.class, method="getDaiCountFromGene")
    public Integer getDaiCountFromGene(Map map);
    /**
     * 获得每个人的孩子
     * @param map 例如 ｛table：dxzp，pid：2｝ 获得dxzp的pid为2的孩子
     * @return
     */
    @SelectProvider(type=ZPProvider.class, method="getChildsFromPid")
    public List<ZP> getChildsFromPid(Map map);
    /**
     * 获得亲兄弟节点
     * @param map 例如 ｛table：dxzp，pid：1，id：2｝ 获得dxzp的id为2的亲兄弟
     * @return
     */
    @SelectProvider(type=ZPProvider.class, method="getXD")
    public List<ZP> getXD(Map map);
    /**
     * 获得每个人的父亲节点
     * @param map 例如 ｛table：dxzp，pid：1｝ 获得dxzp的id为2的亲兄弟
     * @return
     */
    @SelectProvider(type=ZPProvider.class, method="getParent")
    public ZP getParent(Map map);
    /**
     * 族谱数据一共有多少行
     * @return
     */
    @SelectProvider(type=ZPProvider.class, method="getTotalCount")
    public Integer getTotalCount(String table);
    /**
     * 分页查询
     * @param map 例如 ｛table：dxzp，page：Page<ZP>对象｝ 获得dxzp的id为2的亲兄弟
     * @return
     */
    @SelectProvider(type=ZPProvider.class, method="getDataFromPage")
    public List<ZP> getDataFromPage(Map map);
    /**
     * 创建表
     * @param tableName 表名
     * @return
     */
    @UpdateProvider(type=ZPProvider.class, method="createZPTable")
    public Integer createZPTable(String tableName);
    /**
     * 添加族谱信息
     * @param map 例如｛table：dxzp，zp：zp｝
     * @return
     */
    @SelectKey(statement = "select last_insert_id()", keyProperty = "id", before = false, resultType = int.class)
    @InsertProvider(type=ZPProvider.class, method="addZP")
    public Integer addZP(Map map);
    /**
     * 更新族谱成员信息
     * @param map 例如｛table：dxzp，zp：zp｝
     * @return
     */
    @UpdateProvider(type=ZPProvider.class, method="updateZP")
    public Integer updateZP(Map map);
    /**
     * 删除族谱成员信息
     * @param map 例如｛table：dxzp，id：2｝
     * @return
     */
    @DeleteProvider(type=ZPProvider.class, method="deleteZP")
    public Integer deleteZP(Map map);
}
